
var Fingerprint2 = (function () {
  var n = function () { };
  return n.prototype = {
    x64Add: function (n, t) {
      n = [n[0] >>> 16, n[0] & 65535, n[1] >>> 16, n[1] & 65535];
      t = [t[0] >>> 16, t[0] & 65535, t[1] >>> 16, t[1] & 65535];
      var i = [0, 0, 0, 0];
      return i[3] += n[3] + t[3],
        i[2] += i[3] >>> 16,
        i[3] &= 65535,
        i[2] += n[2] + t[2],
        i[1] += i[2] >>> 16,
        i[2] &= 65535,
        i[1] += n[1] + t[1],
        i[0] += i[1] >>> 16,
        i[1] &= 65535,
        i[0] += n[0] + t[0],
        i[0] &= 65535,
        [i[0] << 16 | i[1], i[2] << 16 | i[3]]
    },
    x64Multiply: function (n, t) {
      n = [n[0] >>> 16, n[0] & 65535, n[1] >>> 16, n[1] & 65535];
      t = [t[0] >>> 16, t[0] & 65535, t[1] >>> 16, t[1] & 65535];
      var i = [0, 0, 0, 0];
      return i[3] += n[3] * t[3],
        i[2] += i[3] >>> 16,
        i[3] &= 65535,
        i[2] += n[2] * t[3],
        i[1] += i[2] >>> 16,
        i[2] &= 65535,
        i[2] += n[3] * t[2],
        i[1] += i[2] >>> 16,
        i[2] &= 65535,
        i[1] += n[1] * t[3],
        i[0] += i[1] >>> 16,
        i[1] &= 65535,
        i[1] += n[2] * t[2],
        i[0] += i[1] >>> 16,
        i[1] &= 65535,
        i[1] += n[3] * t[1],
        i[0] += i[1] >>> 16,
        i[1] &= 65535,
        i[0] += n[0] * t[3] + n[1] * t[2] + n[2] * t[1] + n[3] * t[0],
        i[0] &= 65535,
        [i[0] << 16 | i[1], i[2] << 16 | i[3]]
    },
    x64Rotl: function (n, t) {
      return t %= 64,
        t === 32 ? [n[1], n[0]] : t < 32 ? [n[0] << t | n[1] >>> 32 - t, n[1] << t | n[0] >>> 32 - t] : (t -= 32,
          [n[1] << t | n[0] >>> 32 - t, n[0] << t | n[1] >>> 32 - t])
    },
    x64LeftShift: function (n, t) {
      return t %= 64,
        t === 0 ? n : t < 32 ? [n[0] << t | n[1] >>> 32 - t, n[1] << t] : [n[1] << t - 32, 0]
    },
    x64Xor: function (n, t) {
      return [n[0] ^ t[0], n[1] ^ t[1]]
    },
    x64Fmix: function (n) {
      return n = this.x64Xor(n, [0, n[0] >>> 1]),
        n = this.x64Multiply(n, [4283543511, 3981806797]),
        n = this.x64Xor(n, [0, n[0] >>> 1]),
        n = this.x64Multiply(n, [3301882366, 444984403]),
        this.x64Xor(n, [0, n[0] >>> 1])
    },
    x64hash128: function (n, t) {
      var i;
      n = n || "";
      t = t || 0;
      var h = n.length % 16
        , c = n.length - h
        , f = [0, t]
        , e = [0, t]
        , r = [0, 0]
        , u = [0, 0]
        , o = [2277735313, 289559509]
        , s = [1291169091, 658871167];
      for (i = 0; i < c; i = i + 16)
        r = [n.charCodeAt(i + 4) & 255 | (n.charCodeAt(i + 5) & 255) << 8 | (n.charCodeAt(i + 6) & 255) << 16 | (n.charCodeAt(i + 7) & 255) << 24, n.charCodeAt(i) & 255 | (n.charCodeAt(i + 1) & 255) << 8 | (n.charCodeAt(i + 2) & 255) << 16 | (n.charCodeAt(i + 3) & 255) << 24],
          u = [n.charCodeAt(i + 12) & 255 | (n.charCodeAt(i + 13) & 255) << 8 | (n.charCodeAt(i + 14) & 255) << 16 | (n.charCodeAt(i + 15) & 255) << 24, n.charCodeAt(i + 8) & 255 | (n.charCodeAt(i + 9) & 255) << 8 | (n.charCodeAt(i + 10) & 255) << 16 | (n.charCodeAt(i + 11) & 255) << 24],
          r = this.x64Multiply(r, o),
          r = this.x64Rotl(r, 31),
          r = this.x64Multiply(r, s),
          f = this.x64Xor(f, r),
          f = this.x64Rotl(f, 27),
          f = this.x64Add(f, e),
          f = this.x64Add(this.x64Multiply(f, [0, 5]), [0, 1390208809]),
          u = this.x64Multiply(u, s),
          u = this.x64Rotl(u, 33),
          u = this.x64Multiply(u, o),
          e = this.x64Xor(e, u),
          e = this.x64Rotl(e, 31),
          e = this.x64Add(e, f),
          e = this.x64Add(this.x64Multiply(e, [0, 5]), [0, 944331445]);
      r = [0, 0];
      u = [0, 0];
      switch (h) {
        case 15:
          u = this.x64Xor(u, this.x64LeftShift([0, n.charCodeAt(i + 14)], 48));
        case 14:
          u = this.x64Xor(u, this.x64LeftShift([0, n.charCodeAt(i + 13)], 40));
        case 13:
          u = this.x64Xor(u, this.x64LeftShift([0, n.charCodeAt(i + 12)], 32));
        case 12:
          u = this.x64Xor(u, this.x64LeftShift([0, n.charCodeAt(i + 11)], 24));
        case 11:
          u = this.x64Xor(u, this.x64LeftShift([0, n.charCodeAt(i + 10)], 16));
        case 10:
          u = this.x64Xor(u, this.x64LeftShift([0, n.charCodeAt(i + 9)], 8));
        case 9:
          u = this.x64Xor(u, [0, n.charCodeAt(i + 8)]);
          u = this.x64Multiply(u, s);
          u = this.x64Rotl(u, 33);
          u = this.x64Multiply(u, o);
          e = this.x64Xor(e, u);
        case 8:
          r = this.x64Xor(r, this.x64LeftShift([0, n.charCodeAt(i + 7)], 56));
        case 7:
          r = this.x64Xor(r, this.x64LeftShift([0, n.charCodeAt(i + 6)], 48));
        case 6:
          r = this.x64Xor(r, this.x64LeftShift([0, n.charCodeAt(i + 5)], 40));
        case 5:
          r = this.x64Xor(r, this.x64LeftShift([0, n.charCodeAt(i + 4)], 32));
        case 4:
          r = this.x64Xor(r, this.x64LeftShift([0, n.charCodeAt(i + 3)], 24));
        case 3:
          r = this.x64Xor(r, this.x64LeftShift([0, n.charCodeAt(i + 2)], 16));
        case 2:
          r = this.x64Xor(r, this.x64LeftShift([0, n.charCodeAt(i + 1)], 8));
        case 1:
          r = this.x64Xor(r, [0, n.charCodeAt(i)]);
          r = this.x64Multiply(r, o);
          r = this.x64Rotl(r, 31);
          r = this.x64Multiply(r, s);
          f = this.x64Xor(f, r)
      }
      return f = this.x64Xor(f, [0, n.length]),
        e = this.x64Xor(e, [0, n.length]),
        f = this.x64Add(f, e),
        e = this.x64Add(e, f),
        f = this.x64Fmix(f),
        e = this.x64Fmix(e),
        f = this.x64Add(f, e),
        e = this.x64Add(e, f),
        ("00000000" + (f[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (f[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (e[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (e[1] >>> 0).toString(16)).slice(-8)
    }
  },
    n.VERSION = "1.5.1",
    n
})()

var fingerprint = new Fingerprint2()
function getFingerprint(data) {
  return fingerprint.x64hash128(data, 31)
}